<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>匹配(match)查询 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'query-dsl-match-query.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-match-query.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-match-query.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/query-dsl-match-query.html" rel="nofollow" target="_blank">../en/query-dsl-match-query.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="query-dsl.html">查询领域特定语言(Query DSL)</a></span>
»
<span class="breadcrumb-link"><a href="full-text-queries.html">全文查询</a></span>
»
<span class="breadcrumb-node">match 查询</span>
</div>
<div class="navheader">
<span class="prev">
<a href="query-dsl-intervals-query.html">« intervals 查询</a>
</span>
<span class="next">
<a href="query-dsl-match-bool-prefix-query.html">布尔前缀匹配(match_bool_prefix)查询 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="query-dsl-match-query"></a>匹配(match)查询
</h2>
</div></div></div>

<p>
返回与提供的文本、数字、日期或布尔值相 匹配(match) 的文档。

匹配前会分析提供的文本。
</p>
<p>
<code class="literal">match</code> 查询是执行全文搜索的标准查询，包括一些 模糊(fuzzy) 匹配选项。
</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="match-query-ex-request"></a>请求示例
</h3>
</div></div></div>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "this is a test"
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/114.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="match-top-level-params"></a><code class="literal">match</code>的顶级参数
</h3>
</div></div></div>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">&lt;field&gt;</code>
</span>
</dt>
<dd>
(必需的, object) 你想搜索的字段。
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="match-field-params"></a><code class="literal">&lt;field&gt;</code>的参数
</h3>
</div></div></div>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">query</code>
</span>
</dt>
<dd>
<p>(必需的) 你希望在提供的 <code class="literal">&lt;field&gt;</code> 中查找的文本(text)、数字(number)、布尔值(bool)或日期(date)。</p>
<p>
<code class="literal">match</code> 查询会在执行搜索前 <a class="xref" href="analysis.html" title="Text analysis">analyzes</a> 任何提供的文本。

这意味着 <code class="literal">match</code> 查询可以在 <a class="xref" href="text.html" title="Text datatype"><code class="literal">text</code></a> 字段中搜索已分析的 词元(token)，而不是精确的 词项(term)。
</p>
</dd>
<dt>
<span class="term">
<code class="literal">analyzer</code>
</span>
</dt>
<dd>
(可选, string) <a class="xref" href="analysis.html" title="Text analysis">analyzer(分析器)</a> 用于将 <code class="literal">query</code> 中的文本转换为 词元(token)。 

默认为映射到<code class="literal">&lt;field&gt;</code>的 <a class="xref" href="specify-analyzer.html#specify-index-time-analyzer" title="How Elasticsearch determines the index analyzer">索引时使用的分析器(index-time analyzer)</a>。

如果没有映射分析器，则使用索引的默认分析器。
</dd>
<dt>
<span class="term">
<code class="literal">auto_generate_synonyms_phrase_query</code>
</span>
</dt>
<dd>
<p>(可选, boolean) 如果为 <code class="literal">true</code>，将自动为 多词项同义词(multi-term synonyms) 创建 <a class="xref" href="query-dsl-match-query-phrase.html" title="Match phrase query">match phrase(短语匹配)</a> 查询。

默认值为 <code class="literal">true</code>。
</p>
<p>
有关示例请参考 <a class="xref" href="query-dsl-match-query.html#query-dsl-match-query-synonyms" title="Synonyms">在match查询中使用同义词</a>。
</p>
</dd>
<dt>
<span class="term">
<code class="literal">fuzziness</code>
</span>
</dt>
<dd>
(可选, string) 匹配时允许的最大编辑距离。

可用的值及更多信息请参考 <a class="xref" href="common-options.html#fuzziness" title="Fuzziness">模糊性(fuzziness)</a>。

有关示例请参考 <a class="xref" href="query-dsl-match-query.html#query-dsl-match-query-fuzziness" title="Fuzziness in the match query">match查询中的模糊性</a>。
</dd>
<dt>
<span class="term">
<code class="literal">max_expansions</code>
</span>
</dt>
<dd>
(可选, integer) 查询可以扩展到的最大 词项(term) 数。默认值为 <code class="literal">50</code>。
</dd>
<dt>
<span class="term">
<code class="literal">prefix_length</code>
</span>
</dt>
<dd>
(可选, integer) 模糊匹配的起始字符保持不变的分数。默认值为 <code class="literal">0</code>。
</dd>
<dt>
<span class="term">
<code class="literal">fuzzy_transpositions</code>
</span>
</dt>
<dd>
(可选, boolean) 如果为 <code class="literal">true</code>，模糊匹配的编辑包括两个相邻字符的交换(ab → ba)。默认值为 <code class="literal">true</code>。
</dd>
<dt>
<span class="term">
<code class="literal">fuzzy_rewrite</code>
</span>
</dt>
<dd>
<p>(可选, string) 用于重写查询的方法。

可用的值及更多信息请参考  <a class="xref" href="query-dsl-multi-term-rewrite.html" title="rewrite parameter"><code class="literal">rewrite</code> 参数</a>。
</p>
<p>
如果参数 <code class="literal">fuzziness</code> 的值不是 <code class="literal">0</code>，默认情况下，<code class="literal">match</code> 查询使用的 <code class="literal">rewrite</code> 方法是 <code class="literal">top_terms_blended_freqs_${max_expansions}</code>。
</p>
</dd>
<dt>
<span class="term">
<code class="literal">lenient</code> 宽容的
</span>
</dt>
<dd>
(可选, boolean) 
如果为 <code class="literal">true</code>，则忽略基于格式的错误，例如为 <a class="xref" href="number.html" title="Numeric datatypes">numeric</a> 字段提供 text 格式的 <code class="literal">query</code> 值。

默认值为 <code class="literal">false</code>。
</dd>
<dt>
<span class="term">
<code class="literal">operator</code>
</span>
</dt>
<dd>
<p>(可选, string) 用于解释 <code class="literal">query</code> 值中文本的布尔逻辑。有效值有：</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">OR</code> (默认值)
</span>
</dt>
<dd>
例如，查询值 <code class="literal">capital of Hungary</code> 被解释为 <code class="literal">capital OR of OR Hungary</code>。
</dd>
<dt>
<span class="term">
<code class="literal">AND</code>
</span>
</dt>
<dd>
例如，查询值 <code class="literal">capital of Hungary</code> 被解释为 <code class="literal">capital AND of AND Hungary</code>。
</dd>
</dl>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">minimum_should_match</code>
</span>
</dt>
<dd>
<p>(可选, string)
要返回的文档必须匹配的最小子句数。

可用的值及更多信息请参考 <a class="xref" href="query-dsl-minimum-should-match.html" title="minimum_should_match parameter"><code class="literal">minimum_should_match</code> 参数</a>。
</p>
</dd>
<dt>
<span class="term">
<code class="literal">zero_terms_query</code>
</span>
</dt>
<dd>
<p>(可选, string) 指示如果 <code class="literal">analyzer</code> 删除所有 词元(token) (例如使用 <code class="literal">stop</code> 过滤器时)，是否不返回任何文档。有效值有：</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">none</code> (默认值)
</span>
</dt>
<dd>
如果 <code class="literal">analyzer</code> 删除所有 词元(token)，则不返回任何文档。
</dd>
<dt>
<span class="term">
<code class="literal">all</code>
</span>
</dt>
<dd>
返回所有文档, 与 <a class="xref" href="query-dsl-match-all-query.html" title="Match all query"><code class="literal">match_all</code></a> 查询类似。
</dd>
</dl>
</div>
<p>有关示例请参考 <a class="xref" href="query-dsl-match-query.html#query-dsl-match-query-zero" title="Zero terms query">零词项查询(zero terms query)</a>。</p>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="match-query-notes"></a>注意
</h3>
</div></div></div>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="query-dsl-match-query-short-ex"></a>简短请求示例
</h4>
</div></div></div>
<p>可以通过组合 <code class="literal">&lt;field&gt;</code> 和 <code class="literal">query</code> 参数来简化 match 查询语法。例如：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "match" : {
            "message" : "this is a test"
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/115.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="query-dsl-match-query-boolean"></a>match 查询是如何工作的？
</h4>
</div></div></div>
<p>
<code class="literal">match</code> 查询属于 <code class="literal">boolean</code> 类型。

这意味着对所提供的文本进行分析，并且分析过程从所提供的文本中构造一个 boolean 查询。

参数 <code class="literal">operator</code> 可以设置为 <code class="literal">or</code> 或 <code class="literal">and</code>，以控制 boolean 子句（默认为 <code class="literal">or</code>）。

可以使用 <a class="xref" href="query-dsl-minimum-should-match.html" title="minimum_should_match parameter"><code class="literal">minimum_should_match</code></a> 参数设置要匹配的可选 <code class="literal">should</code> 子句的最小数量。
</p>
<p>下面是一个带有 <code class="literal">operator</code> 参数的示例：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "this is a test",
                "operator" : "and"
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/116.console"></div>
<p>
可以设置 <code class="literal">analyzer</code> 来控制使用哪个分析器对文本执行分析过程。

它默认为字段的显式映射定义，或默认的搜索分析器。
</p>
<p>
可以将参数 <code class="literal">lenient</code> 设置为 <code class="literal">true</code>，以忽略由数据类型不匹配导致的异常，例如尝试使用 text 查询字符串查询 numeric 字段。

默认值为 <code class="literal">false</code>。
</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="query-dsl-match-query-fuzziness"></a>match 查询中的模糊性(fuzziness)
</h4>
</div></div></div>
<p>
<code class="literal">fuzziness</code>(模糊性) 允许基于被查询的字段类型进行<em>模糊匹配</em>。

有关允许的设置，请参考 <a class="xref" href="common-options.html#fuzziness" title="Fuzziness">模糊性</a>。
</p>
<p>
在这种情况下，可以设置 <code class="literal">prefix_length</code> 和 <code class="literal">max_expansions</code> 来控制模糊处理过程。

如果设置了模糊选项，查询将使用 <code class="literal">fuzzy_rewrite</code> 参数允许的 <code class="literal">top_terms_blended_freqs_${max_expansions}</code> 作为其 <a class="xref" href="query-dsl-multi-term-rewrite.html" title="rewrite parameter">重写方法(rewrite method)</a> 去控制如何重写查询。
</p>
<p>
默认情况下允许模糊换位(<code class="literal">ab</code> → <code class="literal">ba</code>)，但可以通过将 <code class="literal">fuzzy_transpositions</code> 设置为 <code class="literal">false</code> 来禁用。
</p>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>
模糊匹配不适用于具有同义词的词项(term)，也不适用于分析过程在同一位置产生多个词元(token)的情况。

在底层，这些词项(temr)被扩展为一个混合了词项频率的特殊同义词查询，它不支持模糊扩展。
</p>
</div>
</div>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "this is a testt",
                "fuzziness": "AUTO"
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/117.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="query-dsl-match-query-zero"></a>零词项查询 (zero terms query)
</h4>
</div></div></div>
<p>
如果所使用的分析器像 <code class="literal">stop</code> 过滤器一样删除查询中的所有词元(token)，那么默认行为是根本不匹配任何文档。

为了改变这种情况，可以使用 <code class="literal">zero_terms_query</code> 选项，它接受 <code class="literal">none</code> (默认值) 和 <code class="literal">all</code> (对应于 <code class="literal">match_all</code> 查询)。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "to be or not to be",
                "operator" : "and",
                "zero_terms_query": "all"
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/118.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="query-dsl-match-query-cutoff"></a>截止频率 (cutoff frequency)
</h4>
</div></div></div>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<h3>在 7.3.0 中废弃。</h3>
<p>
此选项可以省略，因为 <a class="xref" href="query-dsl-match-query.html" title="Match query">匹配(match)</a> 可以有效地跳过文档块，而无需任何配置，前提是不跟踪命中的总数。
</p>
</div>
</div>
<p>
匹配查询支持 <code class="literal">cutoff_frequency</code> ，它允许指定一个绝对或相对的文档频率，其中高频词项被移到可选的子查询中，并且只有在 <code class="literal">or</code> 运算符时有一个低频(低于截止值)词项匹配 或 <code class="literal">and</code> 运算符时所有低频词项都匹配 时才被计分。
</p>
<p>
该查询允许在运行时动态处理 <code class="literal">stopwords</code>(停止词) ，它是独立于域(domain)的，并且不需要停止词文件。

它防止对高频词项进行评分/迭代，并且仅在更重要/更低频率的词项匹配文档时才考虑这些词项。

然而，如果所有查询项都高于给定的 <code class="literal">cutoff_frequency</code>，则该查询会自动转换为纯的结合(<code class="literal">and</code>)查询，以确保快速执行。
</p>
<p>
<code class="literal">cutoff_frequency</code>的值，在 [0, 1) 范围内时是一个相对于文档总数的值，而在 >= 1.0 时是一个绝对值。
</p>
<p>下面这个示例显示了一个全部由 停止词(stopword) 组成的查询：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "to be or not to be",
                "cutoff_frequency" : 0.001
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/119.console"></div>
<div class="important admon">
<div class="icon"></div>
<div class="admon_content">
<p>
<code class="literal">cutoff_frequency</code> 选项在每个分片级别上执行。

这意味着当在文档数很少的测试索引上试用它时，你应该遵循“<a href="https://www.elastic.co/guide/en/elasticsearch/guide/2.x/relevance-is-broken.html" class="ulink" target="_top">相关性被破坏</a>”中的建议。
</p>
</div>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="query-dsl-match-query-synonyms"></a>同义词 (synonyms)
</h4>
</div></div></div>
<p>
<code class="literal">match</code> 查询通过 <a class="xref" href="analysis-synonym-graph-tokenfilter.html" title="Synonym graph token filter">synonym_graph</a> 词元过滤器支持多词项的同义词扩展。

当使用这个过滤器时，解析器为每个多词项的同义词创建一个短语(phrase)查询。

例如，同义词 <code class="literal">"ny, new york"</code> 将产生：
</p>
<p><code class="literal">(ny OR ("new york"))</code></p>
<p>
也可以用连接词来匹配多个词项同义词:
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
   "query": {
       "match" : {
           "message": {
               "query" : "ny city",
               "auto_generate_synonyms_phrase_query" : false
           }
       }
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/120.console"></div>
<p>上面的例子创建了一个 boolean 查询：</p>
<p><code class="literal">(ny OR (new AND york)) city</code></p>
<p>
它匹配带有词项 <code class="literal">ny</code> 或连接词 <code class="literal">new AND york</code> 的文档。

默认情况下，参数 <code class="literal">auto_generate_synonyms_phrase_query</code> 设置为 <code class="literal">true</code>。
</p>
</div>

</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="query-dsl-intervals-query.html">« intervals 查询</a>
</span>
<span class="next">
<a href="query-dsl-match-bool-prefix-query.html">布尔前缀匹配(match_bool_prefix)查询 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>